//
//  WBBaseController.swift
//  微博
//
//  Created by Mstarc on 2016/11/28.
//  Copyright © 2016年 Mstarc. All rights reserved.
//

import UIKit
//OC中不支持多继承  可以用协议替代
//swift的写法 更类似于多继承
//class WBBaseController: UIViewController,UITableViewDelegate,UITableViewDataSource
//Swift 中,可以利用extension 可以把'函数'按照功能分类管理,便于阅读和维护
//- 注意:
// 1. extension中不能有属性
// 2. extension不能重新本类父类方法 (重写父类方法是子类的职责,扩展是对类的扩展)


class WBBaseController: UIViewController{
    //表格视图 - 如果用户没有登录 就不创建
    var tabelView: UITableView?
    //刷新控件
    var refreshZControl : UIRefreshControl?
    //上拉刷新标记
    var isPullup = false
    //用户登录标记
//    var userLogon = true
    
    //访客信息字典
    var visitorInfoDict : [String:String]?
    
    
    
    //自定义导航条
    lazy var navigationBar = UINavigationBar(frame: CGRect(x: 0, y: 0, width: UIScreen.cz_screenWidth(), height: 64))
    //自定义导航条目 -  以后设置导航类内容 统一使用 navItem
    lazy var navaItem = UINavigationItem()
     override func viewDidLoad() {
        super.viewDidLoad()
        
        
        setupUI()
   
        WBNetworkManager.shared().userLogin ? loadData() :()
        
    }

    
    //重写title 的didSet
 
    override var title: String?{
        
        didSet{
           navaItem.title = title
        }
    }
    
    //加载数据 - 具体的实现由子类负责
    func loadData()  {
        //如果子类不实现任何方法,默关闭刷新控件
        
        refreshZControl?.endRefreshing()
    }
    
    
    
}

//MARK: - 访客视图监听方法
extension WBBaseController{
    //登录
    func login(){
        //发送通知
        NotificationCenter.default.post(name: NSNotification.Name(WBUserShouldLoginNotification), object: nil, userInfo: nil)

        
        print( "用户登录")
    }
    //注册
    func register(){
        print("用户注册")
    }
    
    
    
}



//MARK:设置界面
extension WBBaseController{
    
     func setupUI()  {
        view.backgroundColor = UIColor.cz_random()
        
        //取消自动缩进 - 如果隐藏导航栏会缩进20 个点
        automaticallyAdjustsScrollViewInsets = false
        
        setupNavigtationBar()
        WBNetworkManager.shared().userLogin ? setupTabelView() : setupVisitorView()
    }
    
    
    //设置表格视图 - 用户登录之后 执行
     func setupTabelView(){
        tabelView = UITableView(frame: view.bounds, style: .plain)
       view.insertSubview(tabelView!, belowSubview: navigationBar)
        //设置数据源和代理 -> 目的:子类直接实现数据源方法
        tabelView?.delegate = self
        tabelView?.dataSource = self
        //设置内柔缩进
        tabelView?.contentInset = UIEdgeInsets(top: navigationBar.bounds.height, left: 0, bottom: (tabBarController?.tabBar.bounds.height)!, right: 0)
        //设置刷新控件
        //1>实例化控件
        refreshZControl = UIRefreshControl()
        //2>添加到表格视图
        tabelView?.addSubview(refreshZControl!)
        //3>添加监听方法
        refreshZControl?.addTarget(self, action: #selector(loadData), for: .valueChanged)
        
        
    }
    //设置访客视图
    private func setupVisitorView(){
        let visitorView = WBVisitorView(frame:view.bounds)
        view.insertSubview(visitorView, belowSubview: navigationBar)
        //1.设置访客视图信息
        visitorView.visitorInfo = visitorInfoDict
        //2.添加访客视图按钮的监听方法
        visitorView.loginButton.addTarget(self, action: #selector(login), for: .touchUpInside)
        visitorView.registButton.addTarget(self, action: #selector(register), for: .touchUpInside)
        //3.设置导航条按钮
        navaItem.leftBarButtonItem = UIBarButtonItem(title: "注册", style: .plain, target: self, action: #selector(register))
        navaItem.rightBarButtonItem = UIBarButtonItem(title: "登录", style: .plain, target: self, action: #selector(login))
    }
    
    //设置导航条
    private func setupNavigtationBar(){
        //添加导航栏
        view.addSubview(navigationBar)
        //将item设置给bar
        navigationBar.items = [navaItem]
        //1.设置navBar 的整个背景的渲染颜色
        navigationBar.barTintColor = UIColor.cz_color(withHex: 0xF6F6F6)
        //2.设置navBar 的背景颜色
        navigationBar.titleTextAttributes = [NSForegroundColorAttributeName:UIColor.darkGray]
        //3.设置系统按钮的文字渲染颜色
        navigationBar.tintColor = UIColor.orange
    }
    
    
    
    
    
    
}


// MARK: - UITableViewDataSource,UITableViewDelegate
extension WBBaseController:UITableViewDataSource,UITableViewDelegate{
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 0
    }
    //基类只是负责准备方法,子类负责具体的实现
    //子类的数据源方法不需要 super
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        //只是保证没有语法错误
        return UITableViewCell()
    }
    
    //在显示最后一行的时候做上拉加载
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        //1.判断indexPath是否为最后一行(indexPath.section最大)/(indexPath.row最后一行)
        //1>row
        let row = indexPath.row
        //2>section
        let section = (tabelView?.numberOfSections)! - 1
        if section < 0 || row <  0 {
            return
        }
        
        //3.行数
        let  count = tabelView?.numberOfRows(inSection: section)
        //如果是最后一行 同时没有上拉加载
        if row == (count! - 1) && !isPullup {
            print("上拉加载")
            isPullup = true
            loadData()
        }
        
        
    }
    
}





